package charpter02_thread_safe.lession06_thread_safe;

import java.util.HashMap;
import java.util.Map;

/**
 * 对象发布和初始化时导致的线程安全问题，我们创建对象并进行发布和初始化供其他类或对象使用是常见的操作，但如果我们操作的时间或地点不对，
 * 就可能导致线程安全问题
 */
public class WrongInit {
    private Map<Integer, String> students;

    public WrongInit() {
        new Thread(() -> {
            students = new HashMap<>();
            students.put(1, "王小美");
            students.put(2, "钱二宝");
            students.put(3, "周三");
            students.put(4, "赵四");
        }).start();
     }
 
    public Map<Integer, String> getStudents() {
        return students;
    }
    public static void main(String[] args) {
        WrongInit wrongInit = new WrongInit();
        Map<Integer, String> students = wrongInit.getStudents();
        // 这里可能还没有初始化完成，就开始进行处理，可能会抛出空指针异常
        for (Map.Entry<Integer, String> entry : students.entrySet()) {
            System.out.println(entry.getKey() + "\t" + entry.getValue());
        }
    }
}
